package com.medsys.appservice;

import java.util.List;



import com.medsys.dao.DAOFactory;
import com.medsys.dao.ReceituarioDAO;
import com.medsys.model.Paciente;
import com.medsys.model.Receituario;
/**
 * Classe de servi�os para a classe {@link Paciente}
 * @author Felipe Lauksas
 *
 */
public class ReceituarioAppService {
	/**
	 * M�todo para salvar um objeto do tipo {@link Paciente} no banco de dados.
	 * @param paciente do tipo {@link Pciente}.
	 */
	public Receituario salvar(Receituario receituario) {

		DAOFactory daoFactory = DAOFactory.getDAOFactory();

		ReceituarioDAO receituarioDAO = daoFactory.getReceituarioDAO();

		try {

			daoFactory.iniciarTransacao();

			receituario = receituarioDAO.salvar(receituario);

			daoFactory.encerrarTransacao();

		} catch (Exception e) {

			daoFactory.cancelarTransacao();

		} finally {

			daoFactory.fechar();

		}
		
		return receituario;
	}
	/**
	 *	M�todo para alterar um objeto do tipo {@link Receituario} no banco de dados.
	 * @param receituario do tipo {@link Receituario}.
	 */
	public void alterar(Receituario receituario) {

		DAOFactory daoFactory = DAOFactory.getDAOFactory();

		ReceituarioDAO receituarioDAO = daoFactory.getReceituarioDAO();

		try {

			daoFactory.iniciarTransacao();

			receituarioDAO.alterar(receituario);

			daoFactory.encerrarTransacao();

		} catch (Exception e) {

			daoFactory.cancelarTransacao();

		} finally {

			daoFactory.fechar();

		}
	}
	/**
	 * M�todo que retorna uma {@link List} com objetos do tipo {@link Receituario}.
	 * @return Objeto do tipo {@link List} populado com objetos do tipo {@link Receituario} de todo o banco de dados.
	 */
	public List<Receituario> listarTodos() {

		DAOFactory daoFactory = DAOFactory.getDAOFactory();

		ReceituarioDAO receituarioDAO = daoFactory.getReceituarioDAO();

		List<Receituario> listReceituarios = null;
		
		try {

			listReceituarios = receituarioDAO.listarTodos();

		} catch (Exception e) {

			daoFactory.cancelarTransacao();

		} finally {

			daoFactory.fechar();

		}
		
		return listReceituarios;

	}
	/**
	 * M�todo que pesquisa um objeto do tipo {@link Receituario} no banco de dados
	 * @param Objeto {@link Long} referente ao ID do receituario
	 * @return Objeto do tipo {@link Receituario}
	 */
	public Receituario pesquisarPorId(Long id) {

		DAOFactory daoFactory = DAOFactory.getDAOFactory();

		ReceituarioDAO receituarioDAO = daoFactory.getReceituarioDAO();

		Receituario receituario = null;
		
		try {

			receituario = receituarioDAO.pesquisarPorId(id);

		} catch (Exception e) {

			daoFactory.cancelarTransacao();

		} finally {

			daoFactory.fechar();

		}
		
		return receituario;

	}
}
